{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "60kkM4qXmOKL"
   },
   "source": [
    "## Train and Benchmark and Neural Decoder  with Viterbi Decoder.\n",
    "\n",
    "This notebook contains pipeline how to train a neural decoder model for decoding convolution code over AWGN Channel at 1/2-RSC signal.\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "cyu1oMO5wIML"
   },
   "source": [
    "## Import required packages"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "colab": {
     "autoexec": {
      "startup": false,
      "wait_interval": 0
     }
    },
    "colab_type": "code",
    "id": "iCzr0Es9IfSf"
   },
   "outputs": [],
   "source": [
    "import multiprocessing as mp\n",
    "import time\n",
    "import numpy as np\n",
    "import commpy as cp\n",
    "import tensorflow as tf\n",
    "\n",
    "from deepcom.model import NRSCDecoder           # Neural Decoder Model\n",
    "from deepcom.metrics import BER, BLER           # metrics to benchmark Neural Decoder Model\n",
    "from deepcom.utils import corrupt_signal        # simulate a AWGN Channel\n",
    "\n",
    "from deepcom.dataset import create_dataset      # Create synthetic dataset\n",
    "from deepcom.dataset import data_genenerator    # data loader for Tensorflow\n",
    "\n",
    "import  matplotlib.pyplot  as plt\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "IsrXsYa7lcb6"
   },
   "source": [
    "## Define Hyper-paramemeters for the experiment"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "colab": {
     "autoexec": {
      "startup": false,
      "wait_interval": 0
     }
    },
    "colab_type": "code",
    "id": "X9VFHvkWlhW9"
   },
   "outputs": [],
   "source": [
    "# Number of training data\n",
    "BLOCK_LEN = 100\n",
    "NUM_TRAINING_DATA = 120000\n",
    "NUM_TESTING_DATA  = 10000\n",
    "\n",
    "# Communication Algo via Deep Learning\n",
    "#(page 5, last paragraph)\n",
    "NOISE_TYPE ='awgn'\n",
    "SNR_train = 0.0\n",
    "\n",
    "\n",
    "# Network Architectures\n",
    "NUM_LAYERS = 2\n",
    "NUM_HIDDEN_UNITS = 400\n",
    "\n",
    "# Hyper-parameters for training\n",
    "BATCH_SIZE = 500       # depends on size of GPU, should be a factor of num_data\n",
    "LEARNING_RATE = 1e-3\n",
    "DROPOUT_RATE= 0.75\n",
    "\n",
    "\n",
    "CONSTRAINT_LEN = 3     # num of shifts in Conv. Encoder\n",
    "TRACE_BACK_DEPTH = 15  # (?) a parameter Viterbi Encoder"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "VBCUqBHQnru1"
   },
   "source": [
    "## Generate Synthetic Dataset for training/evaluation"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "colab": {
     "autoexec": {
      "startup": false,
      "wait_interval": 0
     },
     "base_uri": "https://localhost:8080/",
     "height": 85
    },
    "colab_type": "code",
    "executionInfo": {
     "elapsed": 22629,
     "status": "ok",
     "timestamp": 1529880113413,
     "user": {
      "displayName": "Dat Nguyen",
      "photoUrl": "//lh3.googleusercontent.com/-irIcNYd-KIw/AAAAAAAAAAI/AAAAAAAAAEs/NlM8kG6RL4Q/s50-c-k-no/photo.jpg",
      "userId": "108917076199533451784"
     },
     "user_tz": 420
    },
    "id": "uwbEp-ehnvT8",
    "outputId": "63d819f1-421e-46e8-ade9-9d1221a1556f"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Creating training data....\n",
      "Creating testing data....\n",
      "Number of training sequences 120000\n",
      "Number of testing sequences 10000\n"
     ]
    }
   ],
   "source": [
    "from commpy.channelcoding import Trellis\n",
    "#  Generator Matrix (octal representation)\n",
    "G = np.array([[0o7, 0o5]]) \n",
    "M = np.array([CONSTRAINT_LEN - 1])\n",
    "trellis = Trellis(M, G, feedback=0o7, code_type='rsc')\n",
    "\n",
    "# Create dataset \n",
    "print('Creating training data....')\n",
    "\n",
    "# X_train shape = [NUM_TRAINING_DATA, BLOCK_LENGTH, 2]\n",
    "# Y_train shape = [NUM_TRAINING_DATA, BLOCK_LENGTH, 1]\n",
    "X_train, Y_train = create_dataset(\n",
    "    NUM_TRAINING_DATA, \n",
    "    BLOCK_LEN, \n",
    "    trellis, \n",
    "    noise_type=NOISE_TYPE, snr=SNR_train, seed=2018)\n",
    "\n",
    "print('Creating testing data....')\n",
    "# X_test shape = [NUM_TESTING_DATA, BLOCK_LENGTH, 2]\n",
    "# Y_test shape = [NUM_TESTING_DATA, BLOCK_LENGTH, 1]\n",
    "X_test, Y_test = create_dataset(\n",
    "    NUM_TESTING_DATA, \n",
    "    BLOCK_LEN, \n",
    "    trellis, \n",
    "    noise_type=NOISE_TYPE, snr=SNR_train, seed=1111)\n",
    "\n",
    "print('Number of training sequences {}'.format(len(X_train)))\n",
    "print('Number of testing sequences {}'.format(len(Y_test)))\n",
    "# print(X_train.shape, Y_train.shape)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "2fUS4JyEvFVZ"
   },
   "source": [
    "## Define Neural Decoder Model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "colab": {
     "autoexec": {
      "startup": false,
      "wait_interval": 0
     },
     "base_uri": "https://localhost:8080/",
     "height": 340
    },
    "colab_type": "code",
    "executionInfo": {
     "elapsed": 2518,
     "status": "ok",
     "timestamp": 1529880115957,
     "user": {
      "displayName": "Dat Nguyen",
      "photoUrl": "//lh3.googleusercontent.com/-irIcNYd-KIw/AAAAAAAAAAI/AAAAAAAAAEs/NlM8kG6RL4Q/s50-c-k-no/photo.jpg",
      "userId": "108917076199533451784"
     },
     "user_tz": 420
    },
    "id": "uqzVgS7IvH0r",
    "outputId": "f8746742-fc21-4897-a4af-6fd13b7860c4"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "_________________________________________________________________\n",
      "Layer (type)                 Output Shape              Param #   \n",
      "=================================================================\n",
      "input_1 (InputLayer)         (None, None, 2)           0         \n",
      "_________________________________________________________________\n",
      "bidirectional (Bidirectional (None, None, 800)         967200    \n",
      "_________________________________________________________________\n",
      "batch_normalization (BatchNo (None, None, 800)         3200      \n",
      "_________________________________________________________________\n",
      "bidirectional_1 (Bidirection (None, None, 800)         2882400   \n",
      "_________________________________________________________________\n",
      "batch_normalization_1 (Batch (None, None, 800)         3200      \n",
      "_________________________________________________________________\n",
      "time_distributed (TimeDistri (None, None, 1)           801       \n",
      "=================================================================\n",
      "Total params: 3,856,801\n",
      "Trainable params: 3,853,601\n",
      "Non-trainable params: 3,200\n",
      "_________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "# Construct Neural Decoder\n",
    "inputs = tf.keras.Input(shape=(None, 2))\n",
    "outputs = NRSCDecoder(\n",
    "    inputs, \n",
    "    is_training=True, \n",
    "    num_layers=NUM_LAYERS, \n",
    "    hidden_units=NUM_HIDDEN_UNITS, \n",
    "    dropout=DROPOUT_RATE)\n",
    "model = tf.keras.Model(inputs, outputs)\n",
    "\n",
    "# Set up training \n",
    "model.compile('adam', 'binary_crossentropy', [BER])\n",
    "model.summary()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "L9zfO9Z9vswz"
   },
   "source": [
    "## Start Training/Eval Pipeline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "colab": {
     "autoexec": {
      "startup": false,
      "wait_interval": 0
     },
     "base_uri": "https://localhost:8080/",
     "height": 51
    },
    "colab_type": "code",
    "id": "lLXl8fC9vul5",
    "outputId": "4c63b55a-79d5-4a78-c75a-79a78213c4b2",
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1/100\n",
      "240/240 [==============================] - 322s 1s/step - loss: 0.3706 - BER: 0.1557 - val_loss: 0.5218 - val_BER: 0.1585\n",
      "Epoch 2/100\n",
      "240/240 [==============================] - 312s 1s/step - loss: 0.2771 - BER: 0.1174 - val_loss: 0.2627 - val_BER: 0.1051\n",
      "Epoch 3/100\n",
      "240/240 [==============================] - 317s 1s/step - loss: 0.2500 - BER: 0.1050 - val_loss: 0.2339 - val_BER: 0.0969\n",
      "Epoch 4/100\n",
      "240/240 [==============================] - 317s 1s/step - loss: 0.2375 - BER: 0.0991 - val_loss: 0.2260 - val_BER: 0.0922\n",
      "Epoch 5/100\n",
      "240/240 [==============================] - 314s 1s/step - loss: 0.2309 - BER: 0.0962 - val_loss: 0.2214 - val_BER: 0.0910\n",
      "Epoch 6/100\n",
      "240/240 [==============================] - 316s 1s/step - loss: 0.2269 - BER: 0.0944 - val_loss: 0.2192 - val_BER: 0.0898\n",
      "Epoch 7/100\n",
      "240/240 [==============================] - 320s 1s/step - loss: 0.2245 - BER: 0.0933 - val_loss: 0.2171 - val_BER: 0.0890\n",
      "Epoch 8/100\n",
      "240/240 [==============================] - 318s 1s/step - loss: 0.2226 - BER: 0.0924 - val_loss: 0.2169 - val_BER: 0.0892\n",
      "Epoch 9/100\n",
      "240/240 [==============================] - 321s 1s/step - loss: 0.2213 - BER: 0.0918 - val_loss: 0.2154 - val_BER: 0.0886\n",
      "Epoch 10/100\n",
      "240/240 [==============================] - 319s 1s/step - loss: 0.2203 - BER: 0.0914 - val_loss: 0.2152 - val_BER: 0.0883\n",
      "Epoch 11/100\n",
      "240/240 [==============================] - 320s 1s/step - loss: 0.2192 - BER: 0.0909 - val_loss: 0.2151 - val_BER: 0.0885\n",
      "Epoch 12/100\n",
      "240/240 [==============================] - 316s 1s/step - loss: 0.2185 - BER: 0.0906 - val_loss: 0.2151 - val_BER: 0.0885\n",
      "Epoch 13/100\n",
      "240/240 [==============================] - 313s 1s/step - loss: 0.2178 - BER: 0.0903 - val_loss: 0.2147 - val_BER: 0.0885\n",
      "Epoch 14/100\n",
      "240/240 [==============================] - 314s 1s/step - loss: 0.2174 - BER: 0.0901 - val_loss: 0.2149 - val_BER: 0.0881\n",
      "Epoch 15/100\n",
      "240/240 [==============================] - 315s 1s/step - loss: 0.2169 - BER: 0.0899 - val_loss: 0.2145 - val_BER: 0.0883\n",
      "Epoch 16/100\n",
      "240/240 [==============================] - 315s 1s/step - loss: 0.2166 - BER: 0.0898 - val_loss: 0.2147 - val_BER: 0.0888\n",
      "Epoch 17/100\n",
      "240/240 [==============================] - 313s 1s/step - loss: 0.2161 - BER: 0.0896 - val_loss: 0.2150 - val_BER: 0.0888\n",
      "Epoch 18/100\n",
      "240/240 [==============================] - 314s 1s/step - loss: 0.2158 - BER: 0.0895 - val_loss: 0.2150 - val_BER: 0.0884\n"
     ]
    }
   ],
   "source": [
    "# Set up Data Loader using tf.Dataset\n",
    "train_set = data_genenerator(X_train, Y_train, BATCH_SIZE, shuffle=True)\n",
    "test_set = data_genenerator(X_test, Y_test, BATCH_SIZE, shuffle=False)\n",
    "\n",
    "# Backup best model\n",
    "backup = tf.keras.callbacks.ModelCheckpoint(                     \n",
    "  filepath='BiGRU.hdf5',\n",
    "  monitor='val_loss',\n",
    "  save_best_only=True)\n",
    "    \n",
    "# Stop training early if the model seems to overfit\n",
    "early_stopping = tf.keras.callbacks.EarlyStopping(\n",
    "    monitor='val_loss',\n",
    "    min_delta=0.0,\n",
    "    patience=3,\n",
    "    verbose=0, mode='auto')\n",
    "\n",
    "history = model.fit(\n",
    "    train_set.make_one_shot_iterator(), \n",
    "    steps_per_epoch=len(X_train) //BATCH_SIZE, \n",
    "    validation_data=test_set.make_one_shot_iterator(),\n",
    "    validation_steps= len(X_test) //BATCH_SIZE,\n",
    "    callbacks=[early_stopping, backup],\n",
    "    epochs=100)\n",
    "\n",
    "model = tf.keras.models.load_model('BiGRU.hdf5',{'BER': BER})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "colab": {
     "autoexec": {
      "startup": false,
      "wait_interval": 0
     },
     "base_uri": "https://localhost:8080/",
     "height": 387
    },
    "colab_type": "code",
    "executionInfo": {
     "elapsed": 1105,
     "status": "ok",
     "timestamp": 1529874947100,
     "user": {
      "displayName": "Dat Nguyen",
      "photoUrl": "//lh3.googleusercontent.com/-irIcNYd-KIw/AAAAAAAAAAI/AAAAAAAAAEs/NlM8kG6RL4Q/s50-c-k-no/photo.jpg",
      "userId": "108917076199533451784"
     },
     "user_tz": 420
    },
    "id": "UheNmuX9isBo",
    "outputId": "7e6287e3-aab3-4150-cd79-0b2545b27fe4"
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAfsAAAF3CAYAAACi+eJxAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzt3Xl8VPW9//HXJxs7QbZMWARUpLKJEHEpapSoaFut2xV3rRat0tprraL1pxa7uNzr7XWroo1LtVLrVnrFoiixRYoCyiIggtQKlF1lkTXJ9/fHd4ZMQpZJMme2vJ+Px3nMzNnm83Uin/P9nnM+x5xziIiISObKSnYAIiIiEiwlexERkQynZC8iIpLhlOxFREQynJK9iIhIhlOyFxERyXBK9iIiIhlOyV5ERCTDKdmLiIhkOCV7ERGRDJeT7ADipWvXrq5v377JDiNQX3/9Ne3atUt2GAnRktoKam8ma0ltBbU30ebNm7fJOdetofUyJtn37duXuXPnJjuMQJWVlVFcXJzsMBKiJbUV1N5M1pLaCmpvopnZv2JZT8P4IiIiGU7JXkREJMMp2YuIiGS4jDlnLyIi8bF3715Wr17Nrl27Gr1tfn4+S5cuDSCq1JSo9rZu3ZpevXqRm5vbpO2V7EVEpJrVq1fToUMH+vbti5k1attt27bRoUOHgCJLPYlor3OOzZs3s3r1avr169ekfWgYX0REqtm1axddunRpdKKXYJgZXbp0adJIS4SSvYiI7EeJPrU09/dQshcRkZSyefNmhg0bxrBhwwiFQvTs2XPf5z179sS0jyuuuIJly5bVu87DDz/Mc889F4+QGTVqFPPnz4/LvoKgc/YiIpJSunTpsi9x3nnnnbRv354bb7yx2jrOOZxzZGXV3md98sknG/ye6667rvnBpgn17EVEJC2sWLGCgQMHctFFFzFo0CDWrl3LuHHjKCoqYtCgQUycOHHfupGednl5OZ06dWLChAkcfvjhHHPMMWzYsAGA2267jd/85jf71p8wYQIjR45kwIABzJo1C/DlcM855xwGDhzIueeeS1FRUcw9+J07d3LZZZcxZMgQhg8fzt/+9jcAFi1axJFHHsmwYcMYOnQoK1euZNu2bZx22mkcfvjhDB48mBdffDGe/+nUsxcRkQbUVg72P/4Drr0WduyA00/fN7tNRQVkZ8Pll/tp0yY499zq25aVNTmUjz/+mGeeeYaioiIA7r77bjp37kx5eTknnngi5557LgMHDqy2zZYtWzjhhBO4++67ueGGGygtLWXChAn77ds5x/vvv8+UKVOYOHEif/3rX3nwwQcJhUK89NJLLFiwgOHDh8cc6wMPPECrVq1YtGgRixcv5vTTT2f58uU88sgj3HjjjZx//vns3r0b5xx//vOf6du3L6+//vq+mONJPftalJfD9OmwfHmyIxERkWgHH3zwvkQP8PzzzzN8+HCGDx/O0qVLWbJkyX7btGnThtNOOw2AESNG8Nlnn9W677PPPnu/dWbOnMnYsWMBOPzwwxk0aFDMsc6cOZOLL74YgEGDBtGjRw9WrFjBscceyy9+8QvuvfdeVq1aRevWrRk6dCh//etfmTBhAu+++y75+fkxf08s1LOvhXNw8slwxx1w553JjkZEJMnq64m3bVtt+c6a95137dqsnnxN0U+YW758Of/7v//L+++/T6dOnbj44otrvT0tLy9v3/vs7GzKy8tr3XerVq0aXCceLrnkEo455hhee+01xowZQ2lpKccffzxz585l6tSpTJgwgdNOO41bb701bt+pnn0tcnP93+e6dcmORERE6rJ161Y6dOhAx44dWbt2LdOmTYv7d3zzm9/khRdeAPy59tpGDupy3HHH7bvaf+nSpaxdu5ZDDjmElStXcsghh3D99dfz7W9/m4ULF7JmzRrat2/PJZdcwk9+8hM++OCDuLZDPfs6FBYq2YuIpLLhw4czcOBAvvGNb9CnTx+++c1vxv07fvjDH3LppZcycODAfVNdQ+ynnnrqvnK2xx13HKWlpVx99dUMGTKE3NxcnnnmGfLy8vjDH/7A888/T25uLj169ODOO+9k1qxZTJgwgaysLPLy8nj00Ufj2g5zzsV1h8lSVFTk4vk8+1NOgS1b4L334rbLZkv2c5MTqSW1FdTeTJaObV26dCmHHXZYk7bNtHK55eXllJeX07p1a5YvX84pp5zC8uXLycnxfeVEtre238XM5jnniurYZB/17OsQCkED9RhERCTDbd++ndGjR1NeXo5zjscee2xfok8n6RdxgkSG8Z0DVY0UEWmZOnXqxLx585IdRrPpAr06hEKwZw98+WWyIxEREWkeJfs6FBb617VrkxuHiIhIcynZ1yEU8q+6Il9ERNKdkn0dIj17JXsREUl3SvZ1iPTsNYwvIpJY8XjELUBpaSnr6uixXXzxxbz66qvxCjnl6Wr8OnTsCG3aqGcvIpJosTziNhalpaUMHz6cUKT31oKpZ18HM9+7V89eRCR1PP3004wcOZJhw4Zx7bXXUllZSXl5OZdccglDhgxh8ODBPPDAA/zxj39k/vz5nH/++TGPCFRWVnLDDTcwePBghgwZsu8xs2vWrGHUqFEMGzaMwYMHM2vWrH3fefTRR+/7zlSmnn09QiH17EWkZfvxjyHGx7cDUFHRhuzs+tcZNgzCj5FvlI8++ohXXnmFWbNmkZOTw7hx45g8eTIHH3wwmzZtYtGiRQB89dVXdOrUiQcffJCHHnqIYcOGxbT/P/3pTyxdupQFCxawceNGjjzySI4//nieffZZvvOd73DzzTdTUVHBzp07mTdvHps2bWL27Nl06NCBr776qvENSiD17OtRWKievYhIqpg+fTpz5syhqKiIYcOG8c477/Dpp59yyCGHsGzZMn70ox8xbdq0Jj8edubMmVxwwQVkZ2cTCoUYNWoUc+fO5cgjj+SJJ57g5z//OR999BHt27ff950//elPm/WdiaKefT1CIZgxI9lRiIgkT2N74Nu27QysVrxzju9973vcdddd+y1buHAhr7/+Og8//DAvvfQSkyZNitv3nnTSSZSVlfHaa69x6aWXctNNN3HRRRexcOFCXn755UC+M97Us69HYaGvoFfL45FFRCTBSkpKeOGFF9i0aRPgr9r//PPP2bhxI845zjvvPCZOnLjv8bAdOnRg27ZtMe//uOOOY/LkyVRWVrJ+/XreffddioqK+Ne//kUoFGLcuHFcccUVfPjhh/u+86yzzqr2nalKPft6RC7gXL8e+vRJbiwiIi3dkCFDuOOOOygpKaGyspLc3FweffRRsrOzufLKK3HOYWbcc889AFxxxRVcddVVtGnThvfff5+8vLxq+7vqqqsYP348AP369eOdd95h9uzZDB06FDPj/vvvp3v37pSWlnL//feTm5tLhw4d+P3vf8+qVau48sorqaioIDs7e993piznXGATMAZYBqwAJtSy/HJgIzA/PF0VtewyYHl4uqyh7xoxYoSLt//7P+fAudmz477rJpkxY0ayQ0iYltRW59TeTJaObV2yZEmTt926dWscI0l9iWxvbb8LMNfFkI8D69mb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\n",
      "text/plain": [
       "<Figure size 576x432 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Count of the number of epochs\n",
    "epochs = range(1, len(history.history['loss']) + 1)\n",
    "# Visualize loss history\n",
    "plt.figure(figsize=(8, 6))\n",
    "plt.plot(epochs, history.history['loss'], 'r--')\n",
    "plt.plot(epochs, history.history['val_loss'], 'b-')\n",
    "plt.legend(['Training Loss', 'Test Loss'])\n",
    "plt.xlabel('Epoch')\n",
    "plt.ylabel('Loss')\n",
    "plt.grid()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "_CsQHyoH4nGO"
   },
   "source": [
    "## Benchmark Neural Decoder"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "colab": {
     "autoexec": {
      "startup": false,
      "wait_interval": 0
     },
     "base_uri": "https://localhost:8080/",
     "height": 36
    },
    "colab_type": "code",
    "executionInfo": {
     "elapsed": 693,
     "status": "ok",
     "timestamp": 1529874948606,
     "user": {
      "displayName": "Dat Nguyen",
      "photoUrl": "//lh3.googleusercontent.com/-irIcNYd-KIw/AAAAAAAAAAI/AAAAAAAAAEs/NlM8kG6RL4Q/s50-c-k-no/photo.jpg",
      "userId": "108917076199533451784"
     },
     "user_tz": 420
    },
    "id": "iteYs2bU5EZx",
    "outputId": "f2736499-7d68-4728-c0fd-a5d9fa3be680"
   },
   "outputs": [],
   "source": [
    "def benchmark_neural_decoder(noisy_inputs, labels):\n",
    "    \n",
    "    # Set up data generator\n",
    "    Y = np.reshape(labels, (-1, BLOCK_LEN, 1))\n",
    "    X = np.reshape(np.array(noisy_inputs)[:, :2*BLOCK_LEN], (-1, BLOCK_LEN, 2))\n",
    "    test_set = data_genenerator(X, Y, BATCH_SIZE, shuffle=False)\n",
    "    \n",
    "    # Make predictions in batch\n",
    "    decoded_bits = model.predict(\n",
    "        test_set.make_one_shot_iterator(), \n",
    "        steps=len(Y) // BATCH_SIZE)\n",
    "    \n",
    "    # Compute hamming distances\n",
    "    original_bits = np.reshape(Y, (-1, BLOCK_LEN)).astype(int)\n",
    "    decoded_bits =  np.reshape(np.round(decoded_bits), (-1, BLOCK_LEN)).astype(int)\n",
    "    hamming_dist = np.not_equal(original_bits, decoded_bits)\n",
    "    \n",
    "    return np.sum(hamming_dist, axis=1)\n",
    "\n",
    "def benchmark_viterbi(message_bits, noisy_bits, sigma):\n",
    "  \n",
    "    # make fair comparison between (100, 204) convolutional code and RNN decoder\n",
    "    # Reference: Author's code\n",
    "    noisy_bits[-2*int(M):] = 0\n",
    "    \n",
    "    # Viterbi Decoder on Conv. Code\n",
    "    decoded_bits = cp.channelcoding.viterbi_decode(\n",
    "        coded_bits=noisy_bits.astype(float), \n",
    "        trellis=trellis,\n",
    "        tb_depth=TRACE_BACK_DEPTH,\n",
    "        decoding_type='unquantized')\n",
    "    \n",
    "    # Number of bit errors (hamming distance)\n",
    "    hamming_dist = cp.utilities.hamming_dist(\n",
    "        message_bits.astype(int),\n",
    "        decoded_bits[:-int(M)])\n",
    "    return hamming_dist\n",
    "\n",
    " \n",
    "# #################################################################\n",
    "# For every SNR_db, we generates new noisy signals\n",
    "# for fair comparision.\n",
    "# #################################################################\n",
    "def generate_noisy_input(message_bits, trellis, sigma):\n",
    "    # Encode message bit\n",
    "    coded_bits = cp.channelcoding.conv_encode(message_bits, trellis)\n",
    "    # Corrupt message on BAWGN Channel\n",
    "    coded_bits = corrupt_signal(coded_bits, noise_type='awgn', sigma=sigma)\n",
    "    return coded_bits, message_bits"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "colab": {
     "autoexec": {
      "startup": false,
      "wait_interval": 0
     },
     "base_uri": "https://localhost:8080/",
     "height": 216
    },
    "colab_type": "code",
    "executionInfo": {
     "elapsed": 938376,
     "status": "ok",
     "timestamp": 1529875887369,
     "user": {
      "displayName": "Dat Nguyen",
      "photoUrl": "//lh3.googleusercontent.com/-irIcNYd-KIw/AAAAAAAAAAI/AAAAAAAAAEs/NlM8kG6RL4Q/s50-c-k-no/photo.jpg",
      "userId": "108917076199533451784"
     },
     "user_tz": 420
    },
    "id": "gkTTBO0nvxAi",
    "outputId": "eb1b9114-d056-4ec5-c7e8-8a5ba16af9e2"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[SNR]=0.00\n",
      "\tNeural Decoder:  [BER]=0.0865160 [BLER]=0.978 -- 7.224s\n",
      "\tViterbi Decoder: [BER]=0.0896040 [BLER]=0.951 -- 41.145s\n",
      "[SNR]=1.00\n",
      "\tNeural Decoder:  [BER]=0.0475950 [BLER]=0.873 -- 7.139s\n",
      "\tViterbi Decoder: [BER]=0.0474940 [BLER]=0.788 -- 41.176s\n",
      "[SNR]=2.00\n",
      "\tNeural Decoder:  [BER]=0.0208260 [BLER]=0.613 -- 7.181s\n",
      "\tViterbi Decoder: [BER]=0.0196640 [BLER]=0.477 -- 41.191s\n",
      "[SNR]=3.00\n",
      "\tNeural Decoder:  [BER]=0.0066020 [BLER]=0.289 -- 7.294s\n",
      "\tViterbi Decoder: [BER]=0.0057810 [BLER]=0.190 -- 41.341s\n",
      "[SNR]=4.00\n",
      "\tNeural Decoder:  [BER]=0.0017290 [BLER]=0.093 -- 7.384s\n",
      "\tViterbi Decoder: [BER]=0.0014010 [BLER]=0.055 -- 41.243s\n",
      "[SNR]=5.00\n",
      "\tNeural Decoder:  [BER]=0.0003620 [BLER]=0.025 -- 7.512s\n",
      "\tViterbi Decoder: [BER]=0.0002690 [BLER]=0.015 -- 41.133s\n",
      "[SNR]=6.00\n",
      "\tNeural Decoder:  [BER]=0.0000630 [BLER]=0.005 -- 7.409s\n",
      "\tViterbi Decoder: [BER]=0.0000530 [BLER]=0.004 -- 41.256s\n",
      "[SNR]=7.00\n",
      "\tNeural Decoder:  [BER]=0.0000210 [BLER]=0.002 -- 7.832s\n",
      "\tViterbi Decoder: [BER]=0.0000150 [BLER]=0.001 -- 41.122s\n"
     ]
    }
   ],
   "source": [
    "viterbiBERs, viterbiBLERs = [], []\n",
    "neuralBERs, neuralBLERs = [], []\n",
    "\n",
    "pool = mp.Pool(processes=mp.cpu_count())\n",
    "labels = np.reshape(Y_test, (-1, BLOCK_LEN)).astype(int)\n",
    "try: \n",
    "    SNRs  = np.linspace(0, 7.0, 8)\n",
    "    for snr in SNRs:\n",
    "        snr_linear = snr + 10 * np.log10(1./2.)\n",
    "        sigma = np.sqrt(1. / (2. * 10 **(snr_linear / 10.)))\n",
    "        print('[SNR]={:.2f}'.format(snr))\n",
    "        \n",
    "        # Generates new noisy signals\n",
    "        result = pool.starmap(\n",
    "            func=generate_noisy_input,  \n",
    "            iterable=[(msg_bits, trellis, sigma) for msg_bits in labels])\n",
    "        \n",
    "        X, Y =  zip(*result)\n",
    "        \n",
    "        # #################################################################\n",
    "        # BENCHMARK NEURAL DECODER \n",
    "        # #################################################################\n",
    "        nn_start = time.time()\n",
    "        hamm_dists = benchmark_neural_decoder(X, Y)\n",
    "        \n",
    "        nn_ber = sum(hamm_dists) / np.product(np.shape(Y))\n",
    "        nn_bler = np.count_nonzero(hamm_dists) / len(Y)\n",
    "\n",
    "        neuralBERs.append(nn_ber)\n",
    "        neuralBLERs.append(nn_bler)            \n",
    "        print('\\tNeural Decoder:  [BER]={:5.7f} [BLER]={:5.3f} -- {:3.3f}s'.format(\n",
    "            nn_ber, nn_bler, time.time() - nn_start)) \n",
    "\n",
    "        # #################################################################\n",
    "        # BENCHMARK VITERBI DECODER \n",
    "        # #################################################################\n",
    "        vi_start = time.time()\n",
    "        hamm_dists = pool.starmap(benchmark_viterbi, [(y, x, sigma) for x, y in zip(X, Y)])\n",
    "        \n",
    "        ber = sum(hamm_dists) / np.product(np.shape(Y))\n",
    "        bler = np.count_nonzero(hamm_dists) / len(Y)\n",
    "        \n",
    "        viterbiBERs.append(ber)\n",
    "        viterbiBLERs.append(bler)\n",
    "        print('\\tViterbi Decoder: [BER]={:5.7f} [BLER]={:5.3f} -- {:3.3f}s'.format(\n",
    "              ber, bler, time.time() - vi_start))\n",
    "        \n",
    "except Exception as e:\n",
    "    print(e)\n",
    "finally:\n",
    "    pool.close()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "T0cL-ORChXne"
   },
   "source": [
    "# Result"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1296x504 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# ###################################\n",
    "# Plot Bit Error Rate (BER) Curve\n",
    "# ###################################\n",
    "plt.figure(figsize=(18, 7))\n",
    "\n",
    "plt.subplot(1, 2, 1)\n",
    "plt.title('Block Length = 100 || Data rate = 1/2', fontsize=14)\n",
    "\n",
    "plt.semilogy(SNRs, neuralBERs, '-vr')\n",
    "plt.semilogy(SNRs, viterbiBERs, 's--')\n",
    "plt.legend(['N-RSC (SNR_train=0 dB)', 'Viterbi'], fontsize=16)\n",
    "plt.xlabel('SNR', fontsize=16)\n",
    "plt.xlim(xmin=SNRs[0], xmax=SNRs[-1])  # this line\n",
    "plt.ylabel('BER', fontsize=16)\n",
    "plt.grid(True, which='both')\n",
    "plt.savefig('result_ber_block_length_1000_snr0.png')\n",
    "\n",
    "# ###################################\n",
    "# Plot Block Error Rate (BLER) Curve\n",
    "# ###################################\n",
    "plt.subplot(1, 2, 2)\n",
    "plt.title('Block Length = 100 || Data rate = 1/2', fontsize=14)\n",
    "\n",
    "plt.semilogy(SNRs, neuralBLERs, '-vr')\n",
    "plt.semilogy(SNRs, viterbiBLERs, 's--')\n",
    "plt.ylabel('BLER', fontsize=16)\n",
    "plt.xlabel('SNR', fontsize=16)\n",
    "plt.legend(['N-RSC (SNR_train=0 dB)', 'Viterbi'], fontsize=16)\n",
    "\n",
    "plt.xlim(xmin=SNRs[0], xmax=SNRs[-1])  # this line\n",
    "plt.grid(True, which='both')\n",
    "plt.savefig('result_bler_block_length_1000_snr0.png')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##  Benchmark on K = 1000"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "_, Y_test = create_dataset(NUM_TESTING_DATA, 1000, trellis, snr=0.0, seed=1111)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[SNR]=0.00\n",
      "\tNeural Decoder:  [BER]=0.0872808 [BLER]=0.976 -- 57.465s\n",
      "\tViterbi Decoder: [BER]=0.0904988 [BLER]=0.951 -- 418.030s\n",
      "[SNR]=1.00\n",
      "\tNeural Decoder:  [BER]=0.0469828 [BLER]=0.874 -- 55.937s\n",
      "\tViterbi Decoder: [BER]=0.0468368 [BLER]=0.782 -- 416.469s\n",
      "[SNR]=2.00\n",
      "\tNeural Decoder:  [BER]=0.0201632 [BLER]=0.610 -- 57.278s\n",
      "\tViterbi Decoder: [BER]=0.0189200 [BLER]=0.469 -- 417.209s\n",
      "[SNR]=3.00\n",
      "\tNeural Decoder:  [BER]=0.0066756 [BLER]=0.291 -- 58.072s\n",
      "\tViterbi Decoder: [BER]=0.0057040 [BLER]=0.187 -- 416.264s\n",
      "[SNR]=4.00\n",
      "\tNeural Decoder:  [BER]=0.0017872 [BLER]=0.097 -- 59.193s\n",
      "\tViterbi Decoder: [BER]=0.0014308 [BLER]=0.058 -- 416.808s\n",
      "[SNR]=5.00\n",
      "\tNeural Decoder:  [BER]=0.0003836 [BLER]=0.025 -- 60.344s\n",
      "\tViterbi Decoder: [BER]=0.0003064 [BLER]=0.015 -- 417.140s\n",
      "[SNR]=6.00\n",
      "\tNeural Decoder:  [BER]=0.0000684 [BLER]=0.005 -- 61.527s\n",
      "\tViterbi Decoder: [BER]=0.0000560 [BLER]=0.004 -- 419.178s\n",
      "[SNR]=7.00\n",
      "\tNeural Decoder:  [BER]=0.0000112 [BLER]=0.001 -- 62.895s\n",
      "\tViterbi Decoder: [BER]=0.0000144 [BLER]=0.001 -- 418.950s\n"
     ]
    }
   ],
   "source": [
    "viterbiBERs, viterbiBLERs = [], []\n",
    "neuralBERs, neuralBLERs = [], []\n",
    "\n",
    "pool = mp.Pool(processes=mp.cpu_count())\n",
    "labels = np.reshape(Y_test, (-1, BLOCK_LEN)).astype(int)\n",
    "try: \n",
    "    SNRs  = np.linspace(0, 7.0, 8)\n",
    "    for snr in SNRs:\n",
    "        snr_linear = snr + 10 * np.log10(1./2.)\n",
    "        sigma = np.sqrt(1. / (2. * 10 **(snr_linear / 10.)))\n",
    "        print('[SNR]={:.2f}'.format(snr))\n",
    "        \n",
    "        # Generates new noisy signals\n",
    "        result = pool.starmap(\n",
    "            func=generate_noisy_input,  \n",
    "            iterable=[(msg_bits, trellis, sigma) for msg_bits in labels])\n",
    "        \n",
    "        X, Y =  zip(*result)\n",
    "        \n",
    "        # #################################################################\n",
    "        # BENCHMARK NEURAL DECODER \n",
    "        # #################################################################\n",
    "        nn_start = time.time()\n",
    "        hamm_dists = benchmark_neural_decoder(X, Y)\n",
    "        \n",
    "        nn_ber = sum(hamm_dists) / np.product(np.shape(Y))\n",
    "        nn_bler = np.count_nonzero(hamm_dists) / len(Y)\n",
    "\n",
    "        neuralBERs.append(nn_ber)\n",
    "        neuralBLERs.append(nn_bler)            \n",
    "        print('\\tNeural Decoder:  [BER]={:5.7f} [BLER]={:5.3f} -- {:3.3f}s'.format(\n",
    "            nn_ber, nn_bler, time.time() - nn_start)) \n",
    "\n",
    "        # #################################################################\n",
    "        # BENCHMARK VITERBI DECODER \n",
    "        # #################################################################\n",
    "        vi_start = time.time()\n",
    "        hamm_dists = pool.starmap(benchmark_viterbi, [(y, x, sigma) for x, y in zip(X, Y)])\n",
    "        \n",
    "        ber = sum(hamm_dists) / np.product(np.shape(Y))\n",
    "        bler = np.count_nonzero(hamm_dists) / len(Y)\n",
    "        \n",
    "        viterbiBERs.append(ber)\n",
    "        viterbiBLERs.append(bler)\n",
    "        print('\\tViterbi Decoder: [BER]={:5.7f} [BLER]={:5.3f} -- {:3.3f}s'.format(\n",
    "              ber, bler, time.time() - vi_start))\n",
    "        \n",
    "except Exception as e:\n",
    "    print(e)\n",
    "finally:\n",
    "    pool.close()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1296x504 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# ###################################\n",
    "# Plot Bit Error Rate (BER) Curve\n",
    "# ###################################\n",
    "plt.figure(figsize=(18, 7))\n",
    "\n",
    "plt.subplot(1, 2, 1)\n",
    "plt.title('Block Length = 100 || Data rate = 1/2', fontsize=14)\n",
    "\n",
    "plt.semilogy(SNRs, neuralBERs, '-vr')\n",
    "plt.semilogy(SNRs, viterbiBERs, 's--')\n",
    "plt.legend(['N-RSC (SNR_train=0 dB)', 'Viterbi'], fontsize=16)\n",
    "plt.xlabel('SNR', fontsize=16)\n",
    "plt.xlim(xmin=SNRs[0], xmax=SNRs[-1])  # this line\n",
    "plt.ylabel('BER', fontsize=16)\n",
    "plt.grid(True, which='both')\n",
    "plt.savefig('result_ber_block_length_1000_snr0.png')\n",
    "\n",
    "# ###################################\n",
    "# Plot Block Error Rate (BLER) Curve\n",
    "# ###################################\n",
    "plt.subplot(1, 2, 2)\n",
    "plt.title('Block Length = 100 || Data rate = 1/2', fontsize=14)\n",
    "\n",
    "plt.semilogy(SNRs, neuralBLERs, '-vr')\n",
    "plt.semilogy(SNRs, viterbiBLERs, 's--')\n",
    "plt.ylabel('BLER', fontsize=16)\n",
    "plt.xlabel('SNR', fontsize=16)\n",
    "plt.legend(['N-RSC (SNR_train=0 dB)', 'Viterbi'], fontsize=16)\n",
    "\n",
    "plt.xlim(xmin=SNRs[0], xmax=SNRs[-1])  # this line\n",
    "plt.grid(True, which='both')\n",
    "plt.savefig('result_bler_block_length_1000_snr0.png')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "accelerator": "GPU",
  "colab": {
   "collapsed_sections": [],
   "default_view": {},
   "name": "train_neural_decoder.ipynb",
   "provenance": [],
   "version": "0.3.2",
   "views": {}
  },
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
